package models

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"github.com/gomodule/redigo/redis"
	"time"

	redisC "kop/libs/redis"
)

// create token string
func CreateToken(userID int) (string, error) {

	//var r = redisC.Conn()
	//defer r.Close()
	//
	//// 将旧令牌失效
	////if s, err := redis.String(r.Do("GET", fmt.Sprintf("USER.%d", userID))); err == nil {
	////	_, _ = r.Do("DEL", s)
	////}
	//
	//var m = md5.New()
	//m.Write([]byte(fmt.Sprintf("%d+%d", time.Now().UnixNano(), userID)))
	//var s = hex.EncodeToString(m.Sum(nil))
	//
	//var mess = spb.Token{UserID: userID}
	//
	////_, _ = r.Do("SET", fmt.Sprintf("USER.%d", userID), s)
	//
	//// 令牌信息写入Redis
	//var b, _ = proto.Marshal(&mess)
	//return s, redisC.Set(s, b, 86400*14)

	var r = redisC.Conn()
	defer r.Close()

	if s, err := redis.String(r.Do("GET", fmt.Sprintf("USER.%d", userID))); err == nil {
		_, _ = r.Do("DEL", s)
	}

	var m = md5.New()
	m.Write([]byte(fmt.Sprintf("%d+%d", time.Now().UnixNano(), userID)))

	var token = hex.EncodeToString(m.Sum(nil))

	//var b, _ = proto.Marshal(&spb.Token{UserID: userID})
	_, err := r.Do("SET", token, userID, "EX", 86400*7)
	_, _ = r.Do("SET", fmt.Sprintf("USER.%d", userID), token, "EX", 86400*7)
	return token, err
}

// get token pb.message from redis by token string
//func GetToken(s string) (mess spb.Token, err error) {
//
//	if b, err := redisC.Get(s); err != nil {
//		return mess, err
//	} else {
//		return mess, proto.Unmarshal(b, &mess)
//	}
//}
//
//// save token in redis
//func SaveToken(s string, mess spb.Token) error {
//
//	var r = redisC.Conn()
//	defer r.Close()
//
//	_, _ = r.Do("SET", fmt.Sprintf("USER.%d", mess.UserID), s, "EX", 86400*14)
//
//	var b, _ = proto.Marshal(&mess)
//	_, err := r.Do("SET", s, b, "EX", 86400*14)
//	return err
//}
